package useDeprecatedAPI;

import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.internal.Excluder;
import model.User;

import java.lang.reflect.Field;
/*
弃用API： gson2.8.9
gson.excluder():用于在序列化或反序列化过程中排除某些字段或类型

该版本新出现的弃用API只有一个，因此这里引入了之前版本的弃用API进行调用
 */

/*
依赖解释：
根据excluder函数调用结果，会有不同resultJson，会影响parse()方法及构造方法
 */
public class JsonExcluderUsage {
    public static void useExcluder() throws NoSuchFieldException {
        Gson gson = new Gson();
        Excluder excluder = gson.excluder();
        User user = new User("Alice", 25, "password123");
        Field userNameField = User.class.getDeclaredField("userName");
        String userNameValue = user.getUserName();

        //  使用 Excluder 来判断是否排除该字段
        String result = "";
        if (excluder.excludeField(userNameField, true)) {
            // 如果该字段需要被排除，转成字符串并拼接 "true"
            result = userNameValue + " excluded: true";
            System.out.println(result);
        } else {
            // 如果该字段不需要排除，转成字符串并拼接 "false"
            result = userNameValue + " excluded: false";
            System.out.println(result);
        }

        //  将拼接的字符串转成 JSON 字符串
        String resultJson = gson.toJson(result);
        System.out.println("Serialized result JSON: " + resultJson);

        //  创建 JsonParser 对象
        JsonParser parser = new JsonParser();
        //  使用 parse() 方法解析 JSON 字符串
        JsonElement jsonElement = parser.parse(resultJson);

        //  使用 getAsCharacter 提取第一个字符
        char extractedChar = jsonElement.getAsString().charAt(0);
        System.out.println("First character from parsed JSON: " + extractedChar);
    }
}
